package map;

import java.util.*;
import java.util.Map.Entry;

/**
 * Map的遍历
 *Map支持三种便利方式
 * 遍历key
 * 遍历键值对
 * 遍历value(相对不常用)
 */
public class MapDemo2 {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<>();
        map.put("语文",98);
        map.put("数学",98);
        map.put("英语",88);
        map.put("物理",58);
        map.put("化学",9);
        Map test = new Hashtable();
        System.out.println(map);
        //遍历key
        /*
        Set keySet()
        将当前Map中所有的key以一个Set集合形式返回.遍历该集合元素就等同于遍历当前Map中所有的key
         */
        Set<String> keySet = map.keySet();
        for (String key : keySet) {
            System.out.println(key);
        }
        //遍历键值对
        /*
        Set<Entry> entrySet()
        将当前Map中所有的键值对以一个Set集合形式返回。
            每一组键值对以一个Entry实例形式表示。
            Entry有两个常用方法:getKey()和getValue()用于获取其表示的
            键值对中的key和value
         */
        Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
        Set<Entry<String, Integer>> entrySet1 = map.entrySet();
        for (Map.Entry<String, Integer> entry : entrySet) {
            String key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println(key+":"+value);
        }
        //遍历所有value
        /*
        Collection values()
        将当前Map中所有value以一个集合形式返回
         */
        Collection<Integer> values = map.values();
        for(Integer value : values){
            System.out.println("value:"+value);
        }

        //JDK8之后,集合和Map都提供了forEach方法,基于lambda表达式遍历
        Collection<Integer> c = new ArrayList<>();
        c.add(33);
        c.add(334);
        c.add(323);
        c.add(3313);
        c.forEach(a-> System.out.println(a));
    }
}
